<?php
/**
 * 框架统一入口文件
 */

if (!defined('APPLICATION_ROOT')) exit;

defined('CORE_ROOT') || define('CORE_ROOT', realpath(dirname(__FILE__)));
defined('ROOT_PATH') || define('ROOT_PATH', realpath(dirname(dirname(__FILE__))));
defined('PUBLIC_ROOT') || define('PUBLIC_ROOT', realpath(dirname(dirname(__FILE__))).'/public');

/// 定义运行模式  local/devel/test/deploy
/// local：本地开发模式	devel: 开发模式  test:测试模式  deploy:正式部署模式
/// 框架会根据不同的模式加载不同的配置文件
defined('RUN_MOD') || define('RUN_MOD', 'local');

// 非deploy模式，打开所有告警
if(RUN_MOD != 'deploy') {
	ini_set("display_errors","on");
	error_reporting(E_ALL ^ E_DEPRECATED);
}

/// 定义框架核心编译缓存的存放路径
defined('RUNTIME_PATH') || define('RUNTIME_PATH', APPLICATION_ROOT.'/cache/');

//0:web 1:iPhone 2:Android 3:symbian 4:WAP 5:MTK 6:展讯 7:wp7 8:j2me 9:blackberry 10:wm
define('CLIENT_TYPE_WEB', 0);
define('CLIENT_TYPE_IPHONE', 1);
define('CLIENT_TYPE_ANDROID', 2);
define('CLIENT_TYPE_SYMBIAN', 3);
define('CLIENT_TYPE_WAP', 4);
define('CLIENT_TYPE_MTK', 5);
define('CLIENT_TYPE_ZHANXUN', 6);
define('CLIENT_TYPE_WP', 7);
define('CLIENT_TYPE_J2ME', 8);
define('CLIENT_TYPE_BB', 9);
define('CLIENT_TYPE_WM', 10);

/// 设置时区
date_default_timezone_set('Asia/Shanghai');

/// 记录开始运行时间
$GLOBALS['_t_app_start'] = microtime(true);

defined('IS_CLI') || define('IS_CLI', PHP_SAPI == 'cli' ? 1 : 0);

$compile_mod = array('test', 'deploy');

/// 如果存在框架缓存，直接加载
if (is_file(RUNTIME_PATH.'~bin.php') && in_array(RUN_MOD, $compile_mod)) {
	require RUNTIME_PATH.'~bin.php';
} else {
	/// 加载编译函数文件
	require CORE_ROOT.'/include/compile.inc.php';
	compile_frm($compile_mod);
}

/// 记录加载框架时间
$GLOBALS['_t_app_load'] = microtime(true);

/// 如果是命令行执行，只会执行到这里
if (IS_CLI === 0)
{
	/// 如果是前端，且运行模式是devel，注册运行时间日志
	if (in_array(RUN_MOD, array('devel'))) {
		register_shutdown_function(array('App', 'logRunTime'));
	}

	/// 实例化一个网站应用实例
	App::run();
}